<?php
// 脱离模块的独立控制器trait
// 新的控制器需注意声明basePath属性 这是模版的基路径
trait IndepControllerTrait {

    // 重写渲染方法
    protected function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') {
        $templateFile = $this->getTmpl($templateFile);
        parent::display($templateFile, $charset, $contentType, $content, $prefix);
    }
    // 解析独立控制器的模版路径
    protected function getTmpl($template) {
        $ex = explode('\\', substr(get_class($this),0,-6));
        $ctrl = $ex[count($ex)-1];
        // 解析模版资源地址
        if(false === strpos($template,'://')){
            $template   =   'http://'.str_replace(':', '/', $template);
        }
        $info   =   parse_url($template);
        $file   =   $info['host'].(isset($info['path'])?$info['path']:'');
        $module =   isset($info['user'])?$info['user']:$ex[0];
        if(strtolower($module)=='common')
            $this->basePath = dirname(COMMON_PATH).'/';// 如果是公共目录下的组件
        $module .= '/';
        $layer  =   C('DEFAULT_V_LAYER');

        $baseUrl    =   $this->basePath.$module.$layer.'/';
        // 获取主题
        $theme  =   substr_count($file,'/')<2 ? C('DEFAULT_THEME') : '';

        // 分析模板文件规则
        $depr   =   C('TMPL_FILE_DEPR');
        if('' == $file) {
            // 必须有模版传入
            $this->error('必须指定组件的模版文件');
        }elseif(false === strpos($file, '/')){
            $file = $ctrl . $depr . $file;
        }elseif('/' != $depr){
            $file   =   substr_count($file,'/')>1 ? substr_replace($file,$depr,strrpos($file,'/'),1) : str_replace('/', $depr, $file);
        }
        return $baseUrl.($theme?$theme.'/':'').$file.C('TMPL_TEMPLATE_SUFFIX');
    }
}